from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect, HttpResponse
import hashlib
from .models import User

# Create your views here.
def index(request):
    # 假设 服务端判断 request.cookie['session_id']，session_id没有或不正确禁止登录，重定向到登录页
    print(request.session['is_login'])
    return render(request, 'login/index.html', context={})

def register(request):
    """ GET  返回注册表单 """
    if request.method == 'GET':
        return render(request, 'login/register.html', context={})
    elif request.method == 'POST':
        context = {}
        name = request.POST['name']
        password = request.POST['password']
        # 密码加密  # 也可以 from django.contrib.auth.hashers import make_password ,check_password
        md5 = hashlib.md5()
        md5.update(password.encode())
        hash_password = md5.hexdigest()

        # 验证 用户名、密码是否在长度范围内  len()   # 判断字符串纯中文 # 邮箱
        if len(name) <= 1:
            # 讲ajax时的反例
            context['error_message'] = '用户名太短'
            return render(request, 'login/register.html', context)
        # return render(request, 'login/register.html', context)  # 失败

        user = User(name=name, password=password, hash_password=hash_password)
        user.save()
        return redirect(to='/login/index')  # 成功返回首页

def register_check(request):
    """ 检查注册参数，返回json结果
    :param   客户端的表单请求  name字段
    :method  请求方式  POST
    :return  json格式的字符串
    '
    {
        "code": 100,             # 200成功
        "status": "faild",       # ok成功
        "error_message": "",        # 用户名太短  等...
    }
    ’

    """
    import json
    resp_obj = {}
    name = request.POST['name']
    if len(name) <= 1:
        # 讲ajax时的反例
        resp_obj = {
            'code': 100,
            'status': '验证失败',
            'error_message': '用户名太短',
        }
        resp_json = json.dumps(resp_obj)
        print(type(resp_obj))
        print(type(resp_json))
        return HttpResponse(resp_json)



def do_register(request):
    pass





def login(request):
    if request.method == 'GET':
        return render(request, 'login/login.html', context={})
    elif request.method == 'POST':
        context = {}
        name = request.POST['name']
        password = request.POST['password']

        # todo 密码存储为密文后，登录改为验证密文密码是否一致
        user_list = User.objects.filter(name=name, password=password)   # 多个where条件逗号分隔， 代表and 连接条件。
        # 多条件可以用Q对象from django.db.models import Q
        # User.objects.filter(Q(name=111)&Q(password=1111))
        if user_list:
            # 登录成功

            # 原理：
            # user_list[0].name + time.now()  通过hash生成session_id
            # return HTTPResponse  set_cookie  {'session_id': 'sljfwiej@#sdfSee'}
            # 客户端接收到响应 根据set_cookie响应头把数据存到自己的cookie中
            # 之后客户端每一次请求，都会带上cookie，服务器就会比对是否存在，存在即用户已登录
            # django已经封装了方法，我们可以简单在响应头里设置cookie ,下一个请求的视图函数就可以取到值
            request.session['is_login'] = True
            request.session['username'] = user_list[0].name
            response = redirect(to='/login/index/')   # redirect的父类还是 HttpResponse
            response.set_cookie('is_login', 'True')
            response.set_cookie('name', '小明'.encode())  # cookie值需要编码成二进制供传输过程
            context = { 'message': '登录成功' }
            return response

        else:
            # 登录失败
            if User.objects.filter(name=name).exists():
                context['message'] = '密码错误'
                return render(request, 'login/login.html', context)
            else:
                context['message'] = '用户名不存在，请先注册'
                return render(request, 'login/login.html', context)



def do_login(request):
    pass

def logout(request):
    request.session.flush() # 清除session
    # 统计在线人数，读 django_session表行数 。自己测试注意用不同的浏览器登录。